package cn.doitedu;

import org.apache.hadoop.hive.ql.exec.UDF;
import org.apache.hadoop.io.BytesWritable;
import org.roaringbitmap.longlong.Roaring64Bitmap;

import java.io.IOException;

/**
 * @Author: 深似海
 * @Site: <a href="www.51doit.com">多易教育</a>
 * @QQ: 657270652
 * @Date: 2024/4/24
 * @Desc: 学大数据，上多易教育
 *   输入一个bitmap，返回bitmap中的元素个数（基数）
 **/
public class BitmapCardinalityUDF  extends UDF {


    public Long evaluate( BytesWritable bitmapBytesWritable ) throws IOException {

        byte[] bitmapBytes = bitmapBytesWritable.getBytes();

        // 将字节反序列化成bitmap对象
        Roaring64Bitmap bitmap = BitmapUtils.de(bitmapBytes);

        return bitmap.getLongCardinality();
    }



}
